def get_max(max_list):
    return max(max_list)# 基本子算法（子问题规模小于或等于2时）

# 分治法
def solve(init_list):
    list_length = len(init_list)
    if list_length <= 2:# 若问题规模小于或等于2时，直接调用方法解决完成
        return get_max(init_list)

    left_list = init_list[:list_length // 2]# 1.分解（子问题的规模为 n/2）,分别取列  表其中的前半部分和后半部分
    right_list = init_list[list_length // 2:]

    left_max = solve(left_list) #2.分治、递归(一直递归，分解，直到求出前半部分的最大值，和后半部分的最大值)
    right_max = solve(right_list)

    return get_max([left_max, right_max])# 3.合并（再把前半部分的最大值和后半部分的最大值做个比较，相当于求整个大数组的最大值）


test_list = [12, 6, 5956, 7, 8, 98, 46, 46, 4, 451, 9684, 4]
print(solve(test_list))
